package com.iflytek.aidemo.api;

import com.iflytek.aidemo.model.ApiResponse;
import com.iflytek.aidemo.model.ImageRecord;
import com.iflytek.aidemo.model.Student;
import com.iflytek.aidemo.model.Teacher;
import com.iflytek.aidemo.model.User;
import com.iflytek.aidemo.model.WrongQuestionRecord;
import com.iflytek.aidemo.model.ClassInfo;

import java.time.LocalDate;
import java.util.List;

/**
 * API服务接口
 */
public interface ApiService {
    
    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @return 登录响应
     */
    ApiResponse<User> login(String username, String password);
    
    /**
     * 用户注册
     * @param username 用户名
     * @param password 密码
     * @param userType 用户类型（老师模式/学生模式）
     * @return 注册响应
     */
    ApiResponse<User> register(String username, String password, int userType);

    /**
     * 上传图片记录
     * @param studentId 学生ID
     * @param recordImagePath 记录图片路径
     * @param count 总题目数量
     * @param countCorrect 正确题目数量
     * @param submitTime 提交时间
     * @return 上传响应
     */
    ApiResponse<ImageRecord> uploadImageRecord(int studentId, String recordImagePath, int count, int countCorrect, String submitTime);

    /**
     * 上传错题记录
     *
     * @param studentId 学生ID
     * @param recordId 关联的图片记录ID
     * @param wrongImagePath 错题图片路径
     * @param answer 正确答案
     * @return 包含错题记录的响应对象
     */
    ApiResponse<WrongQuestionRecord> uploadWrongQuestion(
            int studentId,
            int recordId,
            String wrongImagePath,
            String answer,
            String question,
            LocalDate date
    );

    /**
     * 获取学生错题集
     * @param studentId 学生ID
     * @return 错题记录列表响应
     */
    ApiResponse<java.util.List<WrongQuestionRecord>> getWrongQuestionsByStudentId(String studentId);

    /**
     * 提交学生已完成（答对）的错题ID列表，后端可据此删除/标记完成
     * @param studentId 学生ID
     * @return 成功/失败
     */
    ApiResponse<Boolean> completeWrongQuestions(int studentId);

    // ================= 教师端 成绩查询 =================

    /** 根据用户id获取教师id*/
    ApiResponse<Teacher> gerTeacherIdByUserId(String userId);

    /** 获取老师管理的班级列表 */
    ApiResponse<List<ClassInfo>> getClassesByTeacher(String teacherId);

    /**
     * 获取班级在某日期的总览（题目总数、平均分）及学生成绩列表
     * @param classId 班级ID
     * @param date yyyy-MM-dd
     */
    ApiResponse<org.json.JSONObject> getClassOverviewWithStudents(int classId, String date);

    /**
     * 获取某学生在某日期的成绩详情（每条答题记录：图片、总数、正确数、时间）
     */
    ApiResponse<java.util.List<ImageRecord>> getStudentScoreDetail(int studentId, String date);

    // ================= 教师端 班级管理 =================
    /**
     * 根据班级ID查询学生列表
     * @param classId 班级ID（使用Long类型匹配后端）
     * @return 包含学生列表的响应
     */
    ApiResponse<org.json.JSONObject> getStudentsByClass(Long classId);

    /**
     * 创建学生（默认无班级，ID自增）
     * @param
     * @return 包含新学生信息的响应
     */
    ApiResponse<User> createStudent(String username, String password);

    /**
     * 将学生添加到班级（更新学生的班级ID）
     * @param studentId 学生ID
     * @param classId 目标班级ID
     * @return 操作结果响应
     */
    ApiResponse<Boolean> addStudentToClass(long studentId, long classId);

    /**
     * 从班级中删除学生（实际调用删除学生接口）
     * @param classId 班级ID（用于验证权限或日志）
     * @param studentId 学生ID（要删除的学生）
     * @return 操作结果响应
     */
    ApiResponse<Boolean> removeStudentFromClass(Long classId, Long studentId);
}